package com.cskaoyan.javase._2inner._5anonymous._3exercise;

/**
 * 不修改main方法和接口Inter的前提下，补齐Outer类代码
 *      要求在控制台输出HelloWorld
 * 分析:
 *      Outer.method()是一个类名点调用的方法,是一个静态方法
 *      然后它后面又能链式调用一个show方法,这说明Outer.method()的返回值是一个对象
 *      show方法是接口Inter当中的方法
 *      说明: Outer.method()的返回值是接口Inter的子类对象
 *      于是该方法的声明为:
 *      public static Inter method()
 *
 * 最后show方法的实现是输出hello world
 *
 * @since 10:53
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Test {
    public static void main(String[] args) {
        Outer.method().show();
    }
}

interface Inter {
    void show();
}

// 常规的做法,朴素的做法
class InterImpl implements Inter {
    @Override
    public void show() {
        System.out.println("hello world!");
    }
}

class Outer {
    public static Inter method() {
        // return new InterImpl();

        // 方式二,使用局部内部类
        /*class InterImplInner implements Inter {
            @Override
            public void show() {
                System.out.println("hello world!");
            }
        }
        return new InterImplInner();*/

        // 方式三,更简洁的方法,匿名内部类
        // return new Inter() {
        //     @Override
        //     public void show() {
        //         System.out.println("你好世界!");
        //     }
        // };

        // Anonymous new Inter() can be replaced with lambda
        return () -> System.out.println("你好世界!");
    }
}